/*****************************************
 * Author:  huiaove
 * Email:   huiaove@126.com
 * Date:    2021 11.01
 * Address: TianJin
 * Version: V1.0.0
 * 修改记录：
 *             2021 11.01    张亚辉    EEROM驱动               版本号:V1.0.0
 * 功能说明：JA 协议解析驱动
 * **************************************/
#include "J_EEROM.h"
#include "stm32G0xx_hal.h"
#include <rtthread.h>
/**********************************************
* 功能：EEROM初始化
* Email：huiaove@126.com
* Data：2021 11.01
* Version：1.0.0.0
* 修改记录：
*            张亚辉    2021 11.01    创建EEROM初始化函数
**********************************************/
void J_EEROM_Init(J_EEROM_Def_t *handle,uint8_t i2c_addr,uint32_t eerom_size,EEROM_Transmit send,EEROM_Transmit read)
{
    handle->EEROM_I2C_Addr=i2c_addr;
	  handle->eerom_port.read=read;
    handle->eerom_port.send=send;
    handle->EEROM_Size=eerom_size;
}

/*********************************************
 * 功能：EEROM读取一个字节
 * 参数：
 *         handle:EEROM操作句柄
 *         ReadAddr：读取地址
 * 返回：读取数据
 ********************************************/
uint8_t AT24Cxx_ReadOneByte(J_EEROM_Def_t *handle,uint16_t ReadAddr)
{
    uint8_t temp=0;
	  uint16_t dev_add=handle->EEROM_I2C_Addr;
    if(handle->EEROM_Size>AT24C16)
    {
        handle->eerom_port.read(handle->EEROM_I2C_Addr,ReadAddr,2,(uint8_t *)&temp,1,1000);
    }
    else
    {
			  dev_add=(ReadAddr>>8)|dev_add;
        handle->eerom_port.read(dev_add,ReadAddr,1,(uint8_t *)&temp,1,1000);
    }
    return temp;
}

/***********************************************
 * 功能：EEROM 写入一个字节
 * 参数：
 *         handle:EEROM 操作句柄
 *         data：数据
 **********************************************/
void AT24CXX_WriteOneByte(J_EEROM_Def_t *handle,uint16_t WriteAddr,uint8_t data)
{
	  uint16_t dev_add=handle->EEROM_I2C_Addr;
    if(handle->EEROM_Size>AT24C16)
    {
        handle->eerom_port.send(handle->EEROM_I2C_Addr,WriteAddr,2,(uint8_t *)&data,1,1000);
    }
    else
    {
			  dev_add=(WriteAddr>>8)|dev_add;
        handle->eerom_port.send(dev_add,WriteAddr,1,(uint8_t *)&data,1,1000);
    }
}
void Delayiic()
{
        unsigned int i;
        for(i=0;i<500000;i++);
}
/*********************************************
 * 功能：向AT24CXX 指定的地址开始写入指定个数据
 * 参数：
 *         handle:EEROM操作句柄
 *         WriteAddr:写入地址
 *         pBuffer：数据
 *         len：长度
 * 返回：无
*********************************************/
void AT24CXX_Write(J_EEROM_Def_t *handle,uint16_t WriteAddr,uint8_t *pBuffer,uint16_t len)
{
    while(len--)
    {
        AT24CXX_WriteOneByte(handle,WriteAddr,*pBuffer);
        WriteAddr++;
        pBuffer++;
			  //Delayiic();
			  HAL_Delay(10);
		
//		rt_thread_mdelay(5);
    } 
}

/*********************************************
 * 功能：再AT24CXX 指定的地址开始读出指定个数据
 * 参数：
 *         handle:EEROM操作句柄
 *         ReadAddr:读取地址
 *         pBuffer：数据
 *         len：长度
 * 返回：无
*********************************************/
void AT24CXX_Read(J_EEROM_Def_t *handle,uint16_t ReadAddr,uint8_t *pBuffer,uint16_t len)
{
    while(len)
    {
        *pBuffer++=AT24Cxx_ReadOneByte(handle,ReadAddr++);
        //pBuffer++;
			  len--;
			  //Delayiic();
			  HAL_Delay(10);
		
//		rt_thread_mdelay(5);
    } 
}
